Enlace al repositorio

GitHub

Introducción

La diabetes es una enfermedad crónica que afecta a millones de personas en todo el mundo y que representa un desafío creciente para los sistemas de salud. Las complicaciones asociadas con la diabetes, como enfermedades cardiovasculares, nefropatías y neuropatías, pueden aumentar significativamente la necesidad de hospitalización. Además, diversos estudios han sugerido que factores ambientales, incluyendo las variaciones climáticas, podrían desempeñar un papel importante en la exacerbación de síntomas y el desarrollo de complicaciones en personas con diabetes.

A pesar de estos indicios, aún existe una considerable falta de conocimiento sobre cómo las condiciones climáticas específicas, como la temperatura, la humedad, o las precipitaciones, pueden influir en la salud de las personas diabéticas y en los patrones de hospitalización. En particular, no se ha explorado suficientemente si existen correlaciones consistentes entre variables climáticas y las tasas de hospitalización. Este vacío de conocimiento es especialmente relevante en el contexto de un clima cambiante que podría exacerbar estas tendencias.

Con este seminario, buscamos abordar estas lagunas mediante un enfoque interdisciplinario que integre datos climáticos históricos y registros de hospitalización para analizar posibles relaciones entre estas variables y aportar al entendimiento de los factores ambientales que afectan a las personas con diabetes.

Objetivo General

Explorar y analizar la relación entre las hospitalizaciones por diabetes y las variaciones en las condiciones climáticas (como temperatura, humedad y precipitaciones), con el fin de identificar patrones y posibles correlaciones que contribuyan al conocimiento de los factores ambientales que influyen en esta enfermedad.

Objetivos Específicos

  1. Evaluar la relación entre picos de hospitalización por diabetes y extremos climáticos, como olas de calor o periodos de alta humedad.

  2. Identificar posibles correlaciones entre las variaciones climáticas y las tasas de hospitalización, explorando la fuerza y dirección de dichas relaciones.

  3. Determinar si existen diferencias significativas en el impacto de las condiciones climáticas sobre las hospitalizaciones por diabetes en distintas regiones geográficas.

#Ejecuciones

1. Carga de paquetes

A continuación se recogen todos los paquetes utilizados para el tratamiento de los detos de trabajo.

library(pxR)
library(climaemet)
library(dplyr)
library(stringr)
library(shiny)
library(ggplot2)
library(plotly)
library(tidyr)
library(mapSpain)
library(countrycode)
library(sf)
library(DT)
library(readr)

## Use this function to register your API Key temporarly or permanently
# aemet_api_key("eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJmcGFibG81NDVAZ21haWwuY29tIiwianRpIjoiYTI2NWIyNzQtY2M4OS00NWZmLThlNGYtMWJlYWQ2NTA1MTAxIiwiaXNzIjoiQUVNRVQiLCJpYXQiOjE3MjkzNTMxNTgsInVzZXJJZCI6ImEyNjViMjc0LWNjODktNDVmZi04ZTRmLTFiZWFkNjUwNTEwMSIsInJvbGUiOiIifQ.TGFw-QlkAkMyQ2hItIpbSF_xDIoN42JpIzUhf-dOm3A", install= TRUE)

2. Obtención datos diabetes

2.1. Ingresos

Obtenemos los nombres de archivos con datos de diabetes

archivos <- list.files('INPUT/DATA/Diabetes/Ingresos/', pattern = '*.px')

Añadimos la ruta completa de cada archivo

archivos_pc <- sapply(archivos, function(x) paste0('INPUT/DATA/Diabetes/Ingresos/', x))

Creamos el dataframe base con el primer archivo, que servirá para concatenar los datos de años siguientes

df_i <- data.frame(as.data.frame(read.px(archivos_pc[1])))
df_i['Año'] <- 1997  # Añadir columna de año

Bucle para añadir cada año al dataframe

for (i in 2:length(archivos_pc)) {
  # Cargar los datos del año específico
  df_provisional <- data.frame(as.data.frame(read.px(archivos_pc[i])))
  
  # Extraer el año del nombre del archivo
  año <- unlist(strsplit(archivos[i], "\\."))[1]
  año <- substr(año, nchar(año) - 3, nchar(año))
  
  # Añadir columna de año al nuevo dataframe
  df_provisional['Año'] <- año
  
  # Asegurar que las columnas coincidan
  colnames(df_provisional) <- colnames(df_i)
  
  # Concatenar el dataframe con el del año anterior
  df_i <- rbind(df_i, df_provisional)
}

Tras la carga de datos, el dataframe queda así:

2.1.1. Código para limpiar y estandarizar valores de atributos.`

Primero eliminamos el atributo ‘Diagnóstico’

df_i <- select(df_i,-Diagnóstico)
  • Provincias

Si analizamos los distintos valores que toma el atributo ‘Provincia.de.hospitalización’ observamos que supera la suma de provincias (50), ciudades autónomas (2), comunidades autónomas no uniprovinciales (10) y país (1).

length(levels(df_i$Provincia.de.hospitalización))
## [1] 154

Limpiamos los nombres de las provincias: eliminamos números y ajustamos algunos nombres para normalización.

df_i$Provincia.de.hospitalización <- str_replace_all(df_i$Provincia.de.hospitalización,"[0123456789]","") %>% 
  str_replace_all("^ ","") %>% 
  str_replace_all("Araba/Á","A") %>% 
  str_replace_all("/Alacant", '') %>% 
  str_replace_all("ANDALUCÍA", 'Andalucía') %>% 
  str_replace_all('ARAGÓN', 'Aragón') %>% 
  str_replace_all('ASTURIAS','Asturias') %>% 
  str_replace_all('Asturias \\(Principado de\\)', 'Asturias') %>%
  str_replace_all('Asturias, Principado de', 'Asturias') %>%  
  str_replace_all('Asturias, PRINCIPADO DE', 'Asturias') %>%
  str_replace_all('Ávila', 'Avila') %>% 
  str_replace_all('BALEARS, ILLES', 'Baleares') %>% 
  str_replace_all('Balears, Illes', 'Baleares') %>% 
  str_replace_all('Balears \\(Illes\\)', 'Baleares') %>% 
  str_replace_all("CANARIAS", 'Canarias') %>% 
  str_replace_all("CANTABRIA", 'Cantabria') %>% 
  str_replace_all("Castellón de la Plana", 'Castellón') %>% 
  str_replace_all("/Castelló", '') %>% 
  str_replace_all("CASTILLA - LA MANCHA", 'Castilla - La Mancha') %>% 
  str_replace_all("CASTILLA Y LEÓN", 'Castilla y León') %>% 
  str_replace_all("CATALUÑA", 'Cataluña') %>% 
  str_replace_all("Comunitat Valenciana", 'Comunidad Valenciana') %>% 
  str_replace_all("COMUNITAT VALENCIANA", 'Comunidad Valenciana') %>% 
  str_replace_all("Coruña \\(A\\)", 'A Coruña') %>% 
  str_replace_all("Coruña, A", 'A Coruña') %>% 
  str_replace_all("EXTREMADURA", 'Extremadura') %>% 
  str_replace_all("GALICIA", 'Galicia') %>% 
  str_replace_all("Guipúzcoa", 'Gipuzkoa') %>% 
  str_replace_all('MADRID, COMUNIDAD DE','Madrid') %>% 
  str_replace_all('Madrid, Comunidad de', 'Madrid') %>%
  str_replace_all('Madrid \\(Comunidad de\\)', 'Madrid') %>% 
  str_replace_all('MURCIA, REGIÓN DE','Murcia') %>% 
  str_replace_all('Murcia \\(Región de\\)','Murcia') %>%
  str_replace_all('Murcia, Región de','Murcia') %>%
  str_replace_all('Murcia*', 'Murcia') %>% 
  str_replace_all('NAVARRA, COMUNIDAD FORAL DE','Navarra') %>% 
  str_replace_all('Navarra \\(Comun. Foral de\\)', 'Navarra') %>%
  str_replace_all('Navarra, Comunidad Foral de', 'Navarra') %>% 
  str_replace_all('PAÍS VASCO', 'País Vasco') %>% 
  str_replace_all("Palmas \\(Las\\)", 'Las Palmas') %>% 
  str_replace_all("Palmas, Las", 'Las Palmas') %>%
  str_replace_all("Rioja \\(La\\)", 'La Rioja') %>%
  str_replace_all("Rioja, La", 'La Rioja') %>%
  str_replace_all("RIOJA, LA", 'La Rioja') %>% 
  str_replace_all("TOTAL NACIONAL", 'Total') %>% 
  str_replace_all("Total Nacional", 'Total') %>% 
  str_replace_all("/València", '') %>% 
  str_replace_all("Bizkaia", 'Vizcaya')

Comprobamos de nuevo el número de distintos valores en ‘Provincia.de.hospitalización’.

length(levels(factor(df_i$Provincia.de.hospitalización)))
## [1] 63
  • Sexo

Se han registrado el sexo de los individuos masculinos como “Varón” o “Hombres”

levels(factor(df_i$Sexo))
## [1] "Varones"     "Mujeres"     "Ambos sexos" "Hombres"

Se modifica de tal manera de que solo se registren como “Hombres”

df_i$Sexo <- str_replace_all(df_i$Sexo,"Varones", 'Hombres')
levels(factor(df_i$Sexo))
## [1] "Ambos sexos" "Hombres"     "Mujeres"
2.1.2. Código para añadir como atributo la comunidad autónoma.

Se añade la información refenrente a la comunidad autónoma como un nuevo atributo y se eliminan los registros que aglutinan los datos de las comunidades no uniprovinciales y el total nacional.`

df_i<- df_i %>% 
  mutate(Comunidad.Autonoma = case_when(
    Provincia.de.hospitalización %in% c("Almería","Cádiz","Córdoba","Granada","Huelva","Jaén","Málaga","Sevilla") ~ "Andalucía",
    Provincia.de.hospitalización %in% c("Huesca","Teruel","Zaragoza") ~ "Aragón",
    Provincia.de.hospitalización == "Baleares" ~ "Baleares",
    Provincia.de.hospitalización == "Asturias" ~ "Asturias",
    Provincia.de.hospitalización %in% c("Las Palmas","Santa Cruz de Tenerife") ~ "Canarias",
    Provincia.de.hospitalización == "Cantabria" ~ "Cantabria",
    Provincia.de.hospitalización %in% c("Avila","Burgos", "León", "Palencia", "Salamanca", "Segovia", "Soria", "Valladolid", "Zamora") ~ "Castilla y León",
    Provincia.de.hospitalización %in% c("Albacete", "Ciudad Real", "Cuenca", "Guadalajara", "Toledo") ~ "Castilla - La Mancha",
    Provincia.de.hospitalización %in% c("Barcelona", "Girona", "Lleida", "Tarragona") ~ "Cataluña",
    Provincia.de.hospitalización %in% c("Alicante", "Castellón", "Valencia") ~ "Comunidad Valenciana",
    Provincia.de.hospitalización %in% c("Badajoz", "Cáceres") ~ "Extremadura",
    Provincia.de.hospitalización %in% c("A Coruña", "Lugo", "Ourense", "Pontevedra") ~ "Galicia", 
    Provincia.de.hospitalización == "Madrid" ~ "Madrid",
    Provincia.de.hospitalización == "Murcia" ~ "Murcia",
    Provincia.de.hospitalización == "Navarra" ~ "Navarra",
    Provincia.de.hospitalización %in% c("Alava", "Gipuzkoa", "Vizcaya") ~ "País Vasco",
    Provincia.de.hospitalización == "La Rioja" ~ "La Rioja",
    Provincia.de.hospitalización == "Ceuta" ~ "Ceuta",
    Provincia.de.hospitalización == "Melilla" ~ "Melilla"
  )) %>% 
  filter(!grepl("^(Total|Andalucía|Aragón|Canarias|Castilla y León|Castilla - La Mancha|Cataluña|Comunidad Valenciana|Extremadura|Galicia|País Vasco)"
                , Provincia.de.hospitalización)) 
  • Renombrado de atributos
df_i <- rename(.data = df_i, Provincia = Provincia.de.hospitalización, Diagnosticos = value)
2.1.3. Estructura final de los datos

2.2. Muertes

datos_muertes <- read.px('INPUT/DATA/Diabetes/Muertes/muertes1997-2022.px')

Convertimos los datos de muertes a un dataframe para facilitar el análisis

df_m <- as.data.frame(datos_muertes)

Mostramos las primeras filas del dataframe para verificar la carga de datos

2.2.1. Código para limpiar y estandarizar valores de atributos.`

Realizamos los mismos cambios que con los datos de muertes por diabetes.

  • eliminamos el atributo ‘Causa.de.muerte’
df_m <- select(df_m,-Causa.de.muerte)
  • Provincias

Estandarizamos los nombres de las provincias.

df_m$Provincias <- str_replace_all(df_m$Provincias,"[0123456789]","") %>% 
  str_replace_all("^ ","") %>% 
  str_replace_all("Araba/Á","A") %>% 
  str_replace_all("/Alacant", '') %>% 
  str_replace_all("ANDALUCÍA", 'Andalucía') %>% 
  str_replace_all('ARAGÓN', 'Aragón') %>% 
  str_replace_all('ASTURIAS','Asturias') %>% 
  str_replace_all('Asturias \\(Principado de\\)', 'Asturias') %>%
  str_replace_all('Asturias, Principado de', 'Asturias') %>%  
  str_replace_all('Asturias, PRINCIPADO DE', 'Asturias') %>%
  str_replace_all('Ávila', 'Avila') %>% 
  str_replace_all('BALEARS, ILLES', 'Baleares') %>% 
  str_replace_all('Balears, Illes', 'Baleares') %>% 
  str_replace_all('Balears \\(Illes\\)', 'Baleares') %>% 
  str_replace_all("CANARIAS", 'Canarias') %>% 
  str_replace_all("CANTABRIA", 'Cantabria') %>% 
  str_replace_all("Castellón de la Plana", 'Castellón') %>% 
  str_replace_all("/Castelló", '') %>% 
  str_replace_all("CASTILLA - LA MANCHA", 'Castilla - La Mancha') %>% 
  str_replace_all("CASTILLA Y LEÓN", 'Castilla y León') %>% 
  str_replace_all("CATALUÑA", 'Cataluña') %>% 
  str_replace_all("Comunitat Valenciana", 'Comunidad Valenciana') %>% 
  str_replace_all("COMUNITAT VALENCIANA", 'Comunidad Valenciana') %>% 
  str_replace_all("Coruña \\(A\\)", 'A Coruña') %>% 
  str_replace_all("Coruña, A", 'A Coruña') %>% 
  str_replace_all("EXTREMADURA", 'Extremadura') %>% 
  str_replace_all("GALICIA", 'Galicia') %>% 
  str_replace_all("Guipúzcoa", 'Gipuzkoa') %>% 
  str_replace_all('MADRID, COMUNIDAD DE','Madrid') %>% 
  str_replace_all('Madrid, Comunidad de', 'Madrid') %>%
  str_replace_all('Madrid \\(Comunidad de\\)', 'Madrid') %>% 
  str_replace_all('MURCIA, REGIÓN DE','Murcia') %>% 
  str_replace_all('Murcia \\(Región de\\)','Murcia') %>%
  str_replace_all('Murcia, Región de','Murcia') %>%
  str_replace_all('Murcia*', 'Murcia') %>% 
  str_replace_all('NAVARRA, COMUNIDAD FORAL DE','Navarra') %>% 
  str_replace_all('Navarra \\(Comun. Foral de\\)', 'Navarra') %>%
  str_replace_all('Navarra, Comunidad Foral de', 'Navarra') %>% 
  str_replace_all('PAÍS VASCO', 'País Vasco') %>% 
  str_replace_all("Palmas \\(Las\\)", 'Las Palmas') %>% 
  str_replace_all("Palmas, Las", 'Las Palmas') %>%
  str_replace_all("Rioja \\(La\\)", 'La Rioja') %>% 
  str_replace_all("Rioja, La", 'La Rioja') %>%
  str_replace_all("RIOJA, LA", 'La Rioja') %>% 
  str_replace_all("TOTAL NACIONAL", 'Total') %>% 
  str_replace_all("Total Nacional", 'Total') %>% 
  str_replace_all("/València", '') %>% 
  str_replace_all("Bizkaia", 'Vizcaya')
  • Sexo

Se modifica el valor “Ambos sexos” por “Total” para que el atributo sexo comparta los mismos niveles en los dataframes de ingresos y muertes.

levels(factor(df_m$Sexo))
## [1] "Total"   "Hombres" "Mujeres"
df_m$Sexo <-  str_replace_all(df_m$Sexo,"Total","Ambos sexos")
levels(factor(df_m$Sexo))
## [1] "Ambos sexos" "Hombres"     "Mujeres"
2.2.2. Código para añadir como atributo la comunidad autónoma.

De igual manera que con los datos de ingresos, se añade la información referente a la comunidad autónoma como un nuevo atributo y se eliminan los registros que aglutinan los datos de las comunidades no uniprovinciales y el total nacional.

df_m <- df_m %>%
  mutate(Comunidad.Autonoma = case_when(
    Provincias %in% c("Almería","Cádiz","Córdoba","Granada","Huelva","Jaén","Málaga","Sevilla") ~ "Andalucía",
    Provincias %in% c("Huesca","Teruel","Zaragoza") ~ "Aragón",
    Provincias == "Baleares" ~ "Baleares",
    Provincias == "Asturias" ~ "Asturias",
    Provincias %in% c("Las Palmas","Santa Cruz de Tenerife") ~ "Canarias",
    Provincias == "Cantabria" ~ "Cantabria",
    Provincias %in% c("Avila","Burgos", "León", "Palencia", "Salamanca", "Segovia", "Soria", "Valladolid", "Zamora") ~ "Castilla y León",
    Provincias %in% c("Albacete", "Ciudad Real", "Cuenca", "Guadalajara", "Toledo") ~ "Castilla - La Mancha",
    Provincias %in% c("Barcelona", "Girona", "Lleida", "Tarragona") ~ "Cataluña",
    Provincias %in% c("Alicante", "Castellón", "Valencia") ~ "Comunidad Valenciana",
    Provincias %in% c("Badajoz", "Cáceres") ~ "Extremadura",
    Provincias %in% c("A Coruña", "Lugo", "Ourense", "Pontevedra") ~ "Galicia", 
    Provincias == "Madrid" ~ "Madrid",
    Provincias == "Murcia" ~ "Murcia",
    Provincias == "Navarra" ~ "Navarra",
    Provincias %in% c("Alava", "Gipuzkoa", "Vizcaya") ~ "País Vasco",
    Provincias == "La Rioja" ~ "La Rioja",
    Provincias == "Ceuta" ~ "Ceuta",
    Provincias == "Melilla" ~ "Melilla"
  )) %>% 
  filter(!grepl("^(Extranjero|Nacional|Total|Andalucía|Aragón|Canarias|Castilla y León|Castilla - La Mancha|Cataluña|Comunidad Valenciana|Extremadura|Galicia|País Vasco)"
                , Provincias))   
  • Renombrado de atributos
df_m<-rename(.data = df_m, Provincia = Provincias, Muertes = value, Año = Periodo)
2.2.3. Estructura final de los datos

3. Obtención de datos de la AEMET

Se recogen todas las estaciones de la aemet.

estaciones <- aemet_stations()

A continuación, se muestra la estructura de los datos:

Selección de los códigos de las estaciones meteorológicas de interés.

codigos <- c("C449C", "C658L", "0076", "0367", "1212E", "1387", "1484C", "1505", "1690A", "2030", "2331", "2422", "2465", "2614", "2870", "3129", "3013", "3260B", "4121", "4452", "4642E", "5000C", "5530E", "5783", "6000A", "7178I", "8025", "8096", "8178D", "8368U", "8414A", "9434", "9771C", "9898", "6325O", "9091O", "2444", "B278", "1082", "3469A", "5973", "1111", "8500A", "5402", "1014", "5270B", "9170", "6155A", "9263D", "0016A", "2661", "2235U")

Generación del dataframe Datos_metdonde se almacenarán los datos.

datos_met <- data.frame(matrix(ncol = 5))
colnames(datos_met) <- c('codigo', 'ta_max', 'ta_min', 'tm_mes', 'año')

Obtención de los datos de tempertatura máxima, mínima y media mesual durante los años 2003 a 2020 de todas las estaciones selecionadas.

A continuación, se muestra el código para acceder a dichos datos de la AEMET. Para una mayor rapidez de renderizado se importan los datos desde un archivo.

for (año in 2003:2020){
  print(año)
  for (i in codigos){
    print(i)
    met_prov <- as.data.frame(aemet_monthly_clim(i, year = año)) %>% 
      slice (1:12) %>% 
      select(c('ta_max', 'ta_min', 'tm_mes'))
    
    met_prov$ta_max <- sapply(met_prov$ta_max, FUN = function(x) as.numeric(unlist(strsplit(x, '\\('))[1]) )
    met_prov$ta_min <- sapply(met_prov$ta_min, FUN = function(x) as.numeric(unlist(strsplit(x, '\\('))[1]) )
    
    
    met_procesados <-  data.frame('codigo' = i,
                                  'ta_max' = max(met_prov$ta_max, na.rm = TRUE), 
                                  'ta_min' = min(met_prov$ta_min, na.rm = TRUE), 
                                  'tm_mes' = mean(met_prov$tm_mes, na.rm = TRUE),
                                  'año' = año)
    # print(met_procesados)
    datos_met <- rbind(datos_met, met_procesados)
    # print(datos_met)
    Sys.sleep(1.5)
  }
}
load('datos_aemet.RData')

Añadimos la provincia correspondiente a cada registro.

cod_estaciones <- estaciones %>% 
  select(indicativo,provincia) %>% 
  rename(codigo = indicativo)
datos_met <- merge(datos_met,cod_estaciones, by = 'codigo')

Estandarizamos los nombres de los atributos y de las provincias. Eliminamos el atributo ‘codigo’

datos_met<-rename(.data = datos_met, Provincia = provincia, Año = año)
datos_met <- select(datos_met,-codigo)
datos_met$Año <- as.character(datos_met$Año)

datos_met$Provincia <- str_replace_all(datos_met$Provincia,"TARRAGONA","Tarragona") %>% 
  str_replace_all("BARCELONA", "Barcelona") %>% 
  str_replace_all("GIRONA", "Girona") %>% 
  str_replace_all("GIPUZKOA", "Gipuzkoa") %>% 
  str_replace_all("BIZKAIA", "Vizcaya") %>% 
  str_replace_all("CANTABRIA", 'Cantabria') %>% 
  str_replace_all('ASTURIAS','Asturias') %>% 
  str_replace_all("A CORUÑA", "A Coruña") %>% 
  str_replace_all("PONTEVEDRA", "Pontevedra") %>% 
  str_replace_all("LUGO", "Lugo") %>% 
  str_replace_all("OURENSE", "Ourense") %>% 
  str_replace_all("SORIA", "Soria") %>% 
  str_replace_all("PALENCIA", "Palencia") %>% 
  str_replace_all("BURGOS", "Burgos") %>% 
  str_replace_all("VALLADOLID", "Valladolid") %>% 
  str_replace_all("AVILA", "Avila") %>% 
  str_replace_all("SEGOVIA", "Segovia") %>% 
  str_replace_all("ZAMORA", "Zamora") %>% 
  str_replace_all("LEON", "León") %>%
  str_replace_all("SALAMANCA", "Salamanca") %>% 
  str_replace_all("GUADALAJARA", "Guadalajara") %>% 
  str_replace_all("MADRID", "Madrid") %>% 
  str_replace_all("TOLEDO", "Toledo") %>% 
  str_replace_all("CACERES", "Cáceres") %>% 
  str_replace_all("CIUDAD REAL", "Ciudad Real") %>% 
  str_replace_all("BADAJOZ", "Badajoz") %>% 
  str_replace_all("HUELVA", "Huelva") %>% 
  str_replace_all("CEUTA", "Ceuta") %>% 
  str_replace_all("JAEN", "Jaén") %>% 
  str_replace_all("CORDOBA", "Córdoba") %>% 
  str_replace_all("GRANADA", "Granada") %>% 
  str_replace_all("SEVILLA", "Sevilla") %>% 
  str_replace_all("CADIZ", "Cádiz") %>% 
  str_replace_all("MELILLA", "Melilla") %>% 
  str_replace_all("MALAGA", "Málaga") %>% 
  str_replace_all("ALMERIA", "Almería") %>% 
  str_replace_all("MURCIA", "Murcia") %>% 
  str_replace_all("ALICANTE", "Alicante") %>% 
  str_replace_all("CUENCA", "Cuenca") %>% 
  str_replace_all("ALBACETE", "Albacete") %>% 
  str_replace_all("TERUEL", "Teruel") %>% 
  str_replace_all("VALENCIA", "Valencia") %>% 
  str_replace_all("CASTELLON", "Castellón") %>% 
  str_replace_all("ARABA/ALAVA", "Alava") %>% 
  str_replace_all("LA RIOJA", "La Rioja") %>% 
  str_replace_all("NAVARRA", "Navarra") %>% 
  str_replace_all("ZARAGOZA", "Zaragoza") %>% 
  str_replace_all("LLEIDA", "Lleida") %>% 
  str_replace_all("HUESCA", "Huesca") %>% 
  str_replace_all("ILLES BALEARS", "Baleares") %>% 
  str_replace_all("STA. CRUZ DE TENERIFE", "Santa Cruz de Tenerife") %>% 
  str_replace_all("LAS PALMAS", "Las Palmas")

3.1.Estructura final de los datos

4. Obtención de datos de población

Para un mejor análisis de los resultados finales se obtienen las poblaciones anuales de cada provincia.

Poblacion <- read_delim("INPUT/DATA/Poblacion/Poblacion.csv", 
                        delim = ";",locale = locale(encoding = "ISO-8859-1"),  ,escape_double = FALSE, trim_ws = TRUE) %>% 
  select(!(Edad)) %>% 
  filter(grepl('enero', Periodo)) %>%  
  suppressMessages()

Inicialmente Población se estructura así:

4.1. Código para limpiar y estandarizar valores de atributos.

  • Provincias
Poblacion$Provincias <- str_replace_all(Poblacion$Provincias,"[0123456789]","") %>% 
  str_replace_all("^ ","") %>% 
  str_replace_all("Araba/Á","A") %>% 
  str_replace_all("/Alacant", '') %>% 
  str_replace_all('Ávila', 'Avila') %>% 
  str_replace_all('Balears, Illes', 'Baleares') %>% 
  str_replace_all("CANARIAS", 'Canarias') %>% 
  str_replace_all("CANTABRIA", 'Cantabria') %>% 
  str_replace_all("/Castelló", '') %>% 
  str_replace_all("Coruña, A", 'A Coruña') %>% 
  str_replace_all("Guipúzcoa", 'Gipuzkoa') %>% 
  str_replace_all('Murcia*', 'Murcia') %>% 
  str_replace_all("Palmas, Las", 'Las Palmas') %>%
  str_replace_all("Rioja, La", 'La Rioja') %>%
  str_replace_all("/València", '') %>% 
  str_replace_all("Bizkaia", 'Vizcaya')
  • Periodo
Poblacion$Periodo <- substr(Poblacion$Periodo,nchar(Poblacion$Periodo)-4,nchar(Poblacion$Periodo)) %>% 
  as.integer()
  • Valores

Nos quedamos con la parte entera del valor referente a población y lo guardamos como número.

Poblacion$Total <- sapply(sapply(Poblacion$Total, strsplit, split = ','), function(x) x[1]) 

Poblacion$Total <- Poblacion$Total %>% 
  str_replace_all("\\.","") %>% 
  as.integer()
  • Renombrado
Poblacion <- rename(.data = Poblacion, Provincia = Provincias, Año = Periodo, Total_d = Total)

4.2. Estructura final de los datos

5. Fusión de datos en un único dataframe

Unión de datos de ingreso y muerte

df_combined <- left_join(x = df_i, y = df_m, by = c("Provincia", "Año", "Comunidad.Autonoma", "Sexo"))

Unión de todos los datos de diabetes (en df_combined) y datos meteorológicos.

df_combined <- left_join(x = df_combined, y = datos_met, by = c("Provincia", "Año"))

Resultado final.

head(df_combined)
##   Provincia    Sexo Diagnosticos  Año Comunidad.Autonoma Muertes ta_max ta_min
## 1   Almería Hombres         3172 1997          Andalucía      37     NA     NA
## 2     Cádiz Hombres         7641 1997          Andalucía      82     NA     NA
## 3   Córdoba Hombres         2943 1997          Andalucía      62     NA     NA
## 4   Granada Hombres         3974 1997          Andalucía      74     NA     NA
## 5    Huelva Hombres         1654 1997          Andalucía      37     NA     NA
## 6      Jaén Hombres         3042 1997          Andalucía      52     NA     NA
##   tm_mes
## 1     NA
## 2     NA
## 3     NA
## 4     NA
## 5     NA
## 6     NA

Algunos graficos de Ejemplo

En la aplicacion shiny ademas de encontrar estos dos primeros graficos de ejemplo encontraremos muchos mas ejemplos

Grafico de Diagnosticos (100.000 hab) de cada provincia por año (desde 2010)

datos_filtrados <- df_combined %>% 
  filter(Año >= 2010 & Sexo == "Ambos sexos")
p <- ggplot(datos_filtrados, aes_string(x = "Año", y = "Diagnosticos", color = "Comunidad.Autonoma",
                                        group = "Comunidad.Autonoma", text = "paste('Provincia:', Provincia)"
)) +
  geom_point() +
  geom_smooth(method = "lm", aes(color = Comunidad.Autonoma), se = FALSE ) +
  labs(title = paste("Diagnosticos", "(cada 100.000 hab) por año y provincia (Sexo:", "Ambos sexos", ")"),
       x = "Año", y = "Diagnosticos") +
  theme_minimal()
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
ggplotly(p)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: text.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?
print(p)
## `geom_smooth()` using formula = 'y ~ x'
## Warning: The following aesthetics were dropped during statistical transformation: text.
## ℹ This can happen when ggplot fails to infer the correct grouping structure in
##   the data.
## ℹ Did you forget to specify a `group` aesthetic or to convert a numerical
##   variable into a factor?

Grafico de Diagnosticos (100.000 hab) de cada provincia por año (desde 2010)

datos_filtrados_temp <- df_combined %>%
  filter(Sexo == "Ambos sexos" & !is.na(tm_mes) & Año >= 2010)

p2 <- ggplot(datos_filtrados_temp, aes_string(
  x = "tm_mes",
  y = "Diagnosticos",
  color = "Comunidad.Autonoma",
  text = "paste('Provincia:', Provincia, '<br>Año:', Año)"
)) +
  geom_point(alpha = 0.6) +
  geom_smooth(
    method = "lm", 
    se = TRUE, 
    aes_string(x = "tm_mes", y = "Diagnosticos"), 
    inherit.aes = FALSE, 
    color = "black"
  ) +
  labs(title = paste("Relación entre", "Diagnosticos", "y","tm_mes", "(cada 100.000 hab) (Sexo:", "Ambos sexos", ")"),
       x = "tm_mes", y = "Número de:Diagnosticos") +
  theme_minimal()

ggplotly(p2)
## `geom_smooth()` using formula = 'y ~ x'
print(p2)
## `geom_smooth()` using formula = 'y ~ x'

### Esto es una prueba del shiny e inicio del mismo

Para poder ejecutar esto correctamente hemos de insertar la carga de datos etc arriba

library(shiny)
library(ggplot2)
# Supongamos que el dataframe ya está cargado en tu entorno de trabajo con el nombre df_i

# Interfaz de usuario
ui <- fluidPage(
  titlePanel("Comparación de Casos por Provincia entre Dos Años"),
  sidebarLayout(
    sidebarPanel(
      selectInput("year1", "Seleccione el primer año:", choices = NULL),  # Se llenará dinámicamente
      selectInput("year2", "Seleccione el segundo año:", choices = NULL), # Se llenará dinámicamente
      selectInput("sex", "Seleccione el sexo:", choices = NULL)           # Se llenará dinámicamente
    ),
    mainPanel(
      plotOutput("histPlot")
    )
  )
)

# Servidor
server <- function(input, output, session) {
  # Actualizar las opciones de los menús desplegables dinámicamente
  observe({
    updateSelectInput(session, "year1", choices = unique(df_i$Año))
    updateSelectInput(session, "year2", choices = unique(df_i$Año))
    updateSelectInput(session, "sex", choices = unique(df_i$Sexo))
  })
  
  output$histPlot <- renderPlot({
    # Filtrar los datos en función de los años y el sexo seleccionados
    datos_filtrados <- df_i[(df_i$Año == input$year1 | df_i$Año == input$year2) & df_i$Sexo == input$sex, ]
    
    # Crear el histograma comparativo
    ggplot(datos_filtrados, aes(x = Provincia.de.hospitalización, y = value, fill = as.factor(Año))) +
      geom_bar(stat = "identity", position = "dodge") +
      theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
      labs(x = "Provincia", y = "Casos", title = paste("Comparación de casos entre", input$year1, "y", input$year2),
           fill = "Año")
  })
}

# Correr la aplicación
shinyApp(ui = ui, server = server)
Shiny applications not supported in static R Markdown documents